package com.example.algorithm.huawei_rongyao_29;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

// 找出字符串中第一个只出现一次的字符
// 难度：简单
/**
 要在字符串中找出第一个只出现一次的字符，可以利用哈希表来记录每个字符出现的次数，然后再遍历字符串找出第一个只出现一次的字符。

 输入描述:
 输入一个非空字符串

 输出描述:
 输出第一个只出现一次的字符，如果不存在输出-1

 示例1
 输入
 asdfasdfo

 输出
 o

 输入
 asdfasdf
 输出
 -1

 * 步骤
 * 统计字符出现次数：使用哈希表（例如 HashMap）来记录每个字符出现的次数。
 * 找出第一个只出现一次的字符：再次遍历字符串，找到第一个出现次数为1的字符。
 * 输出结果：如果找到了这样的字符，则输出；否则输出 -1。
 *
 * 实现步骤
 * 遍历字符串：第一次遍历记录每个字符的出现次数。
 * 再次遍历字符串：找到第一个只出现一次的字符。
 * */
public class Q17_FirstUniqueCharacter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        System.out.println(findFirstUniqueCharacter(input));
    }

    public static String findFirstUniqueCharacter(String s) {
        // 额外的map。键是元素，值是出现次数
        Map<Character, Integer> charCount = new HashMap<>();

        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }

        // 不使用entry方式遍历，这是map遍历的另一种方法。
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (charCount.get(c) == 1) {
                return String.valueOf(c);
            }
        }


        return "-1";
    }
}

